私がプログラミングをするときの第一言語は Perl です。周囲には「私は Perl 以外のプログラミング言語はよくわかりません」と念を押すくらいには Perl ばかり書いています。
しかし、2018年の今日 Perl は一定の役割を終えた古い言語とみなされ、メインストリームからは退いたと多くの人が考えています。10年前の2008年を思い返しても、複数の対抗言語の登場で Perl に陰りがあった事は事実ですし、今日のメインストリームに Perl が居ないことを改めて言う必要も無いでしょう。
それでもなぜ私は Perl を書き続けるのか、少し考えてみました。
私と Perl
私と Perl との本格的な出会いの場は、大学院を卒業した2003年に入社したIT企業です。その会社がメインで使用していたプログラミング言語が Perl だったので自然と Perl を書くようになりました。
2003年3月に大学院を卒業するまで数学を専攻していましたが、お世辞にもプログラムを書けるとは言えない状態でした。大学1年生で選択必修だったC言語の授業に対して「全然面白くないな」と思ったほど。純粋数学と実用的プログラミングは渾然一体ではありません。ましてや選択公理だ非可算無限大だと言っている当時の私のような学生にはなおさらです。当時隆盛し始めたLinuxに熱心な知人や学部の先生方が簡単な Perl を書いているのを見ても「自分には難しそうだな」と敬遠していました。
それでも、数学のレポートを綺麗に印字したいという欲求から LaTeX を勉強するようになり、その流れで SGML や HTML 等のマークアップ言語について熱心に勉強したことがウェブプログラマーとしての基礎体力となりました。大学院では院生や教員に数学科ドメインでメールやウェブサイトを提供するためサーバ構築してと教授陣から依頼があり、そこでの活動も現在に繋がります。
その後入社したIT企業では大学院時代に得たインフラ知識で頑張りますと言ったものの、Linux 周りの OSS で著名な方が何人もいる環境では戦力外に等しく、最初の1年は雑用でした。情シス的な仕事をしつつ、シェルスクリプトでのサーバのログ処理が限界に来ていたので、自主的に Perl を勉強し始めたのが最初でした。Perl を選んだ理由は、当時の会社のメイン言語が Perl だったため、先輩に質問しやすいだろうと思ったから。その後、メインプロダクトのコードを書いてみないかと勧誘があり、少しずつプログラマーとして歩み始めました。
2005年ごろになると、複数のWebサーバとDBサーバのシステムを与えられて一人開発者としてサービス開発をしていくことになりました。そこで使うプログラミング言語も Perl を選択。当時から PHP や Ruby が注目されていましたが、Perl なら先輩方に質問できること、自分には冒険するほどのスキルも無かったので、自然な選択でした。
そして十数年 Perl を書くことになります。
続ける原動力は何か
2003年から15年も経過しているわけで、その間に他の言語にシフトするチャンスは何度もありました。それでもPerlを書き続けたのは、冒険をせず安全に行きたいという考え以外にも理由があったように感じます。
感謝と恩返し
OSS はフリー(無償であること以上に自由なこと)を尊重する文化です。OS やプログラミング言語の実行環境は基本有償(しかも学生にとってかなり高価)だった2000年台初頭、Linux やその上で動作する Perl を始めとするプログラミング言語がフリーなことは驚きがありました。Perl 自体もまた OSS の一つです。
20世紀末に CGI のキラーアプリとして日本でも Perl がもてはやされ、海外発の Perl ではあるものの 2000年台には日本の Perl コミュニティも活発でした。2009年の PSGI と Plack はその到達点の一つのように思います。
様々な Perl モジュールはもとより、ウェブ上の解説記事や先人が苦労した情報が無償で手に入ります。勉強会やカンファレンスも、無償もしくは実費のみの安価なものです。今でこそ当たり前ですが当時は画期的なことのように思えました。YAPC 自体、元々 OSCON の参加費用が高額(だいたい$1000以上)であることへの代替です。Yet Another とは OSCON 等に対するもの。
そして勉強会やカンファレンスで得た仲間の存在も忘れてはいけません。彼らも感謝の対象です。かけがえのないコミュニティの存在は Perl を書き続ける原動力です。
このフリーの環境で勉強させてもらった自分にとって感謝は大きい。多くの先人がフリーで提供してくれた Perl を始めとした様々なものに感謝しつつ、自分も有用な何かをOSS・フリーで提供することで恩返ししたい。その思いが Perl を書き続け、Perl プログラミングや教育に関心を持ち続ける大きな理由なのかなと思います。
継続の重要さ
そして継続の重要さ。これは根底の理解をする前に複数のプログラミング言語をつまみ食いしないと言い換えてもいい。
人間はどうしても飽きが来たり、上向かない学習曲線に焦ったりするもの。そういうときに新しいプログラミング言語の話を聞くと「こっちを勉強した方が身につくのでは?」と考えがちです。最初の言語選定が失敗そのものだった場合その転換が当たることもあるのですが、不幸にも言語ジプシーの道を歩みだすことも少なくない。変遷する流行がさらに我々を惑わせます。
私も学生時代の頃は出来もしない様々なプログラミング言語の入門書を買い続けていました。自戒。書店の本棚の前で意欲に駆られても、購入したこと自体に安心して読まない書籍が…。「それはあなただけだ」とツッコミも来そうですが、「積ん読」という言葉が普及していることからも、精神安定剤としての書籍のお世話になった人も少なくないではないでしょうか。
多くの物への興味を無くせとは言いませんが、時間は有限です。条件分岐や繰り返しや関数などプログラミング言語の根底の考え方は共通なので、まずは特定のプログラミング言語でそれをしっかりに見つけたい。
一つの到達点として、オブジェクト指向モジュールを不自由無く作れるところまで進めたら別のプログラミング言語へのシフトもスムーズでしょう。ただ、当初のプログラミング言語をさらに深掘りすることも楽しい。ガベージコレクション、メタプログラミング、深い文法の知識、インタプリタの内部実装、並列処理…まだ見ぬ世界が広がっています。そこで深掘りした体験はプログラミング言語に依らない確固たる知識となるでしょう。
もともと私は深く学ぶことに楽しさを見出す傾向にあり、最初に獲得した Perl を続ける理由の一つのようです。
できない理由を道具のせいにしたくない
先ほどの継続の重要さと重なる部分でもありますが、できない理由を道具のせいにしたくないこともあります。
時々ネットで発生する「言語dis」。Perl は晒される側の常連ですね。若い頃は私もPerlを言語disの対象に晒されて怒ったりしたものですが、冷静になって「なんでこの人、自分に関係無い他者を熱心にdisっているんだろう」と何日も熟考したことがあります。
disる側は、自陣営のプログラミング言語を良く言うために相対的に相手を貶めているという構図はシンプルです。深い理由もなく、これが真相の場合も多いでしょう。しかしプログラミング言語は道具です。何故そんなに他者の道具を批判するのか。たかが道具なのか、されど道具なのか。
disる側がdis対象のプログラミング言語を使って(使わされて)酷い目に合わされたかという視点もあるでしょう。使っていたのであれば様々な私怨もあるでしょうし、酷いソースコードを押し付けられる等、同情できそうな事柄もありそうです。それでもdisの正当化は難しいですが。
視点を心無い個人ではなくIT企業に目を向けると、その企業のメイン言語を変えるという出来事に共通点を見いだせそうです。印象深いのは、20世紀末からJavaを使っていたとあるIT企業が数年後にPHPへメイン言語を変更、そしてさらに数年後に更に別の言語へメイン言語を変更しました。この言語変更の際、技術責任者と思しき人がメディア等で変更前の言語がいかに上手くいかないか力説していたのが印象的でしたが、そこまでダメなのかと疑問も持ちました。確かに私はJavaもPHPも書けませんが、JavaやPHPを活用して素晴らしいサービスを作っている会社は今も昔も多くある。disという下品さは無いものの、公の場で上手くいかない理由と名指しされたJavaやPHPが不憫にも思えました。
良い道具を使えというのは真です。古い良くない道具を批判するのも楽でしょう。ただ己の能力不足を道具のせいにしていないか、そして道具批判によってその「良くない道具」を使い続けている人々を不快にさせていないかは自問する必要があると思いました。私もデジタルガジェットなどで新しもの好きの顔があり、気をつけたいです。
また、ウェブ技術のコモデティ化と JSON API の一般化によって、JSON::PP と HTTP::Tiny (Perl 5.14 以降のコア)で小規模のツール作成に不自由しないことも後押ししているなと感じます。
まとめ
仕事柄、他のプログラミング言語を読み書きする機会もあり、それを経て「Perl のこの文法、イケてないな〜」と思うことは定期的にあります。ただ、先発言語を参考にした後発言語の文法が優れていることは当然のことで、些細なそれが私に Perl を捨てさせる理由にはならないようです。
「Perl しか書けない」と言うと「古い」「エンジニアたるもの、多くのプログラミング言語を使えて当然」といった論説が聞こえてきます。上述の「複数の言語をつまみ食いしない」話で反論するのも良いですが、むしろ新旧や対象の多寡よりもどれも深くないことの方が問題だと感じています。Perl をある程度深めたおかげで、他のプログラミング言語は公式マニュアルだけで多少は読み書きできるので、深めることの大切さを実感します。
最近は鳴りを潜めた「フルスタックエンジニア」も、万能なスーパーマンという個人のブランドよりも、何でも押し付け可能な便利屋という使用者側(会社や上司)の都合の方を私は強く感じます。そもそも個人のブランドは特定の分野に長けている人についてくるもののようにも思えます。前者の人が使いやすく後者の人が使いにくいというのはあくまで使用者側の話。「〜〜しかできない」を謙遜や自虐ではなく、得意なことを強調して伝える手法に使っても良い気がします。器用貧乏という成句も思い出されます。
あと単純に「それは楽しいですか?」という問いかけを大事にしたい。仕事で求められた場合は当然学習するし、外野が望んでいる人物像に合わせることも大切ですが、自分が楽しいと思ったことを優先した方が長い目で見て伸びるのではないか。それがたまたま古いものだったとしても。外野が「そんな古い技術ではエンジニアとして食っていけない」と言ってきたら、「空前の少子高齢化と労働力不足が進行中だし、エンジニアで食っていけなくても何か仕事はあるでしょう」と返したい。誰も見向きもしない深掘りも、年月が経って役に立つことが無いとは言い切れません。
パラダイムシフトの必要性を痛感して別のプログラミング言語に着手することは当然あるでしょう。例えば Perl では iOS ネイティブアプリは書けません。それでも現状の問題解決のために Perl を併用しつつ、少しずつ領域を広げていけばいいと思います。
ここ最近は解説記事や教育活動といった側面で Perl にまつわる活動を続けていますが、実際に活用してもらえるプログラムを書いて公開する活動が疎かなのは反省点。業務や個人で機会を作ってほそぼそと頑張ります。
その他、細かい「続ける原動力」もありますが、字数も多くなってきたのでまたの機会にでも。